<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/tsc.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/tsc.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="k">/*</span>
<a name="2" /><span class="True">       2:</span> <span class="k"> * x86 TSC related functions</span>
<a name="3" /><span class="True">       3:</span> <span class="k"> */</span>
<a name="4" /><span class="True">       4:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_X0FTTV9YODZfVFNDX0hfMA__"><span class="b">_ASM_X86_TSC_H</span></a>
<a name="5" /><span class="True">       5:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0FTTV9YODZfVFNDX0hfMA__"><span class="b">_ASM_X86_TSC_H</span></a>
<a name="6" /><span class="True">       6:</span> 
<a name="7" /><span class="True">       7:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">processor</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="8" /><span class="True">       8:</span> 
<a name="9" /><span class="True">       9:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_TlNfU0NBTEVfMA__"><span class="b">NS_SCALE</span></a>    <span class="c">10</span> <span class="k">/* 2^10, carefully chosen */</span>
<a name="10" /><span class="True">      10:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_VVNfU0NBTEVfMA__"><span class="b">US_SCALE</span></a>    <span class="c">32</span> <span class="k">/* 2^32, arbitralrily chosen */</span>
<a name="11" /><span class="True">      11:</span> 
<a name="12" /><span class="True">      12:</span> <span class="k">/*</span>
<a name="13" /><span class="True">      13:</span> <span class="k"> * Standard way to access the cycle counter.</span>
<a name="14" /><span class="True">      14:</span> <span class="k"> */</span>
<a name="15" /><span class="True">      15:</span> <span class="m">typedef</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="m">long</span> <span class="b">cycles_t</span><span class="f">;</span>
<a name="16" /><span class="True">      16:</span> 
<a name="17" /><span class="True">      17:</span> <span class="m">extern</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">cpu_khz</span><span class="f">;</span>
<a name="18" /><span class="True">      18:</span> <span class="m">extern</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">tsc_khz</span><span class="f">;</span>
<a name="19" /><span class="True">      19:</span> 
<a name="20" /><span class="True">      20:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">disable_TSC</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="21" /><span class="True">      21:</span> 
<a name="22" /><span class="True">      22:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">cycles_t</span> <span class="b">get_cycles</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="23" /><span class="True">      23:</span> <span class="f">{</span>
<a name="24" /><span class="True">      24:</span>     <span class="m">unsigned</span> <span class="m">long</span> <span class="m">long</span> <span class="b">ret</span> <span class="f">=</span> <span class="c">0</span><span class="f">;</span>
<a name="25" /><span class="True">      25:</span> 
<a name="26" /><span class="False">      26:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl9UU0NfMA__"><span class="b">CONFIG_X86_TSC</span></a>
<a name="27" /><span class="False">      27:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><a href="cpu.c_macros_noref.html#_Y3B1X2hhc190c2NfMA__"><span class="b">cpu_has_tsc</span></a><span class="f">)</span>
<a name="28" /><span class="False">      28:</span>         <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="29" /><span class="True">      29:</span> <span class="f">#</span><span class="n">endif</span>
<a name="30" /><span class="True">      30:</span>     <span class="b">rdtscll</span><span class="f">(</span><span class="b">ret</span><span class="f">)</span><span class="f">;</span>
<a name="31" /><span class="True">      31:</span> 
<a name="32" /><span class="True">      32:</span>     <span class="m">return</span> <span class="b">ret</span><span class="f">;</span>
<a name="33" /><span class="True">      33:</span> <span class="f">}</span>
<a name="34" /><span class="True">      34:</span> 
<a name="35" /><span class="True">      35:</span> <span class="m">static</span> <a href="cpu.c_macros_ref.html#_X19hbHdheXNfaW5saW5lXzA_"><span class="b">__always_inline</span></a> <span class="b">cycles_t</span> <span class="b">vget_cycles</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="36" /><span class="True">      36:</span> <span class="f">{</span>
<a name="37" /><span class="True">      37:</span>     <span class="k">/*</span>
<a name="38" /><span class="True">      38:</span> <span class="k">     * We only do VDSOs on TSC capable CPUs, so this shouldn&apos;t</span>
<a name="39" /><span class="True">      39:</span> <span class="k">     * access boot_cpu_data (which is not VDSO-safe):</span>
<a name="40" /><span class="True">      40:</span> <span class="k">     */</span>
<a name="41" /><span class="False">      41:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl9UU0NfMA__"><span class="b">CONFIG_X86_TSC</span></a>
<a name="42" /><span class="False">      42:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><a href="cpu.c_macros_noref.html#_Y3B1X2hhc190c2NfMA__"><span class="b">cpu_has_tsc</span></a><span class="f">)</span>
<a name="43" /><span class="False">      43:</span>         <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="44" /><span class="True">      44:</span> <span class="f">#</span><span class="n">endif</span>
<a name="45" /><span class="True">      45:</span>     <span class="m">return</span> <span class="f">(</span><span class="b">cycles_t</span><span class="f">)</span><span class="b">__native_read_tsc</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="46" /><span class="True">      46:</span> <span class="f">}</span>
<a name="47" /><span class="True">      47:</span> 
<a name="48" /><span class="True">      48:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">tsc_init</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="49" /><span class="True">      49:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">mark_tsc_unstable</span><span class="f">(</span><span class="m">char</span> <span class="f">*</span><span class="b">reason</span><span class="f">)</span><span class="f">;</span>
<a name="50" /><span class="True">      50:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">unsynchronized_tsc</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="51" /><span class="True">      51:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">check_tsc_unstable</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="52" /><span class="True">      52:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">check_tsc_disabled</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="53" /><span class="True">      53:</span> <span class="m">extern</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">native_calibrate_tsc</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="54" /><span class="True">      54:</span> 
<a name="55" /><span class="True">      55:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">tsc_clocksource_reliable</span><span class="f">;</span>
<a name="56" /><span class="True">      56:</span> 
<a name="57" /><span class="True">      57:</span> <span class="k">/*</span>
<a name="58" /><span class="True">      58:</span> <span class="k"> * Boot-time check whether the TSCs are synchronized across</span>
<a name="59" /><span class="True">      59:</span> <span class="k"> * all CPUs/cores:</span>
<a name="60" /><span class="True">      60:</span> <span class="k"> */</span>
<a name="61" /><span class="True">      61:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">check_tsc_sync_source</span><span class="f">(</span><span class="m">int</span> <span class="b">cpu</span><span class="f">)</span><span class="f">;</span>
<a name="62" /><span class="True">      62:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">check_tsc_sync_target</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="63" /><span class="True">      63:</span> 
<a name="64" /><span class="True">      64:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">notsc_setup</span><span class="f">(</span><span class="m">char</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="65" /><span class="True">      65:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">tsc_save_sched_clock_state</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="66" /><span class="True">      66:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">tsc_restore_sched_clock_state</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="67" /><span class="True">      67:</span> 
<a name="68" /><span class="True">      68:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _ASM_X86_TSC_H */</span>
<a name="69" /><span class="True">      69:</span> </pre>
  </body>
</html>
